#pragma once
#include<stdio.h>
#include<stdlib.h>

// 带头+双向+循环链表增删查改实现
 typedef int LTDataType;
 typedef struct ListNode
 {
   LTDataType _data;
   struct ListNode* _next;
   struct ListNode* _prev;
 }ListNode;

 void Init(ListNode* pHead);

 // 创建返回链表的头结点.
 ListNode* ListCreate(LTDataType x);
 // 双向链表销毁
 void ListDestory(ListNode* pHead);
 // 双向链表打印
 void ListPrint(ListNode* pHead);
 // 双向链表尾插
 void ListPushBack(ListNode* pHead, LTDataType x);
 // 双向链表尾删
 void ListPopBack(ListNode* pHead);
 // 双向链表头插
 void ListPushFront(ListNode* pHead, LTDataType x);
 // 双向链表头删
 void ListPopFront(ListNode* pHead);
 // 双向链表查找
 ListNode* ListFind(ListNode* pHead, LTDataType x);
 // 双向链表在pos的前面进行插入
 void ListInsert(ListNode* pos, LTDataType x);
 // 双向链表删除pos位置的节点
 void ListErase(ListNode* pos);
